package br.com.cogerh.sidec.view;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import br.com.cogerh.sidec.model.Diretoria;
import br.com.cogerh.sidec.model.Gerencia;
import br.com.cogerh.sidec.model.Pessoa;
import br.com.cogerh.sidec.model.Projeto;

@ManagedBean(name = "pessoaBean")
@SessionScoped
public class PessoaBean {
	private Pessoa pessoa;
	private List<SelectItem> listaNomesGerencia;
	private List<Pessoa> listaResponsavel;
	private List<SelectItem> listaResponsavel2;
	private Integer teste;
	private Integer idResponsavelSelecionado;
	private List<String> listaStringResponsaveis;
	private String nomeResponsavelSelecionado;

	public String novo() {
		pessoa = new Pessoa();
		populaListaNomesGerencia();
		return "sucesso";
	}

	public String consultar(){
		populaResponsavelSelect();
		listar();
		
		return "sucesso";
	}

	public String editar() {
		if (pessoa != null) {
			return "sucesso";
		} else {
			return "erro";
		}

	}
	
	public String cancelar(){
		listar();
		return "sucesso";
	}

	public String salvar() {

		PessoaRN pessoaRN = new PessoaRN();

		
		
		if (pessoa.getId() == null) {
			pessoaRN.salvar(pessoa);
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage("Responsavel Salvo Com Sucesso"));
			
			
		} else {
			pessoaRN.editar(pessoa);
			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage("Responsavel Editado Com Sucesso"));

		}

		limparFormulario();
		listar();

		return "sucesso";
	}

	

	public void listar() {
		listaResponsavel = new ArrayList<Pessoa>();
		PessoaRN pessoaRN = new PessoaRN();
		
			for (Pessoa responsavel : pessoaRN.listar()) {
			listaResponsavel.add(responsavel);
		}
			teste();
			
			
			
			populaListaNomesGerencia();
	}
	
	public void teste(){
		GerenciaRN gerenciaRN = new GerenciaRN();
		List<Gerencia> gerencias = gerenciaRN.listar();
		
		for (Gerencia gerencia : gerencias) {
			for (Pessoa pessoa_gerencia : gerencia.getPessoas()) {
				for (Pessoa pessoa : listaResponsavel) {
					if(pessoa_gerencia.equals(pessoa)){
						pessoa.setGerencia(gerencia);
					}
				}
				
			}
		}
	
	}
	
	
	public String excluir() {
		CompromissoRN compromissoRN = new CompromissoRN();
		if (pessoa != null) {
			
		
			PessoaRN pessoaRN = new PessoaRN();
			pessoaRN.excluir(pessoa);

			FacesContext.getCurrentInstance().addMessage(null,
					new FacesMessage("Responsavel Exluir Com Sucesso"));
			listar();
			
			
			return "sucesso";
		}
		else{
			return "erro";
		}

	}
	
	public void populaListaNomesGerencia(){
	
		listaNomesGerencia = new ArrayList<SelectItem>();
		GerenciaRN gerenciaRN = new  GerenciaRN();
		
		for (Gerencia gerencia : gerenciaRN.listar()) {
			this.listaNomesGerencia.add(new SelectItem(gerencia.getId(),gerencia.getNome()));
		}
		
	}
	
	
	public void limparFormulario() {
		pessoa = null;
	
	}
	
	public void populaResponsavelSelect() {
		PessoaRN responsavelRN = new PessoaRN();
		this.listaStringResponsaveis = new ArrayList<String>();
		
		for (Pessoa pessoa : responsavelRN.listar()) {
			this.listaStringResponsaveis.add(pessoa.getNome());
		}		
			
	}
	
	
	public void listarByFiltros() {		
		PessoaRN pessoaRN = new PessoaRN();
		
		listaResponsavel = pessoaRN.listarByParametros(nomeResponsavelSelecionado);
		teste();
		nomeResponsavelSelecionado = "";
	}
	
	
	public List<String> complete(String query) {
		populaResponsavelSelect();				
		List<String> listaNomeResponsaveis = new ArrayList<String>();
		
		for (String responsavel : listaStringResponsaveis) {
			if (responsavel.toLowerCase().contains(query.toLowerCase())) {
				listaNomeResponsaveis.add(responsavel);
			}
		}
		
		return listaNomeResponsaveis;		
	}

	
	// //////////////////////////////////////////////
	// /////////////////////GET AND SET /////////////
	// //////////////////////////////////////////////



	public PessoaBean() {

		listar();
	}

	public Pessoa getPessoa() {
		return pessoa;
	}

	public void setPessoa(Pessoa pessoa) {
		this.pessoa = pessoa;
	}

	public List<SelectItem> getListaNomesGerencia() {
		return listaNomesGerencia;
	}

	public void setListaNomesGerencia(List<SelectItem> listaNomesGerencia) {
		this.listaNomesGerencia = listaNomesGerencia;
	}

	public List<Pessoa> getListaResponsavel() {
		return listaResponsavel;
	}

	public void setListaResponsavel(List<Pessoa> listaResponsavel) {
		this.listaResponsavel = listaResponsavel;
	}

	public Integer getTeste() {
		return teste;
	}

	public void setTeste(Integer teste) {
		this.teste = teste;
	}

	public Integer getIdResponsavelSelecionado() {
		return idResponsavelSelecionado;
	}

	public void setIdResponsavelSelecionado(Integer idResponsavelSelecionado) {
		this.idResponsavelSelecionado = idResponsavelSelecionado;
	}
	
	public List<SelectItem> getListaResponsavel2() {
		return listaResponsavel2;
	}

	public void setListaResponsavel2(List<SelectItem> listaResponsavel2) {
		this.listaResponsavel2 = listaResponsavel2;
	}
	
	public List<String> getListaStringResponsaveis() {
		return listaStringResponsaveis;
	}

	public void setListaStringResponsaveis(List<String> listaStringResponsaveis) {
		this.listaStringResponsaveis = listaStringResponsaveis;
	}

	public String getNomeResponsavelSelecionado() {
		return nomeResponsavelSelecionado;
	}

	public void setNomeResponsavelSelecionado(String nomeResponsavelSelecionado) {
		this.nomeResponsavelSelecionado = nomeResponsavelSelecionado;
	}
	
	
}
